package com.sync;

/**
 --允许2和3重排序，但不允许其他线程“看到”这个重排序
 * 基于类初始化的解决方案
 *
 * JVM在类的初始化阶段（即在Class被加载后，且被线程使用之前），
 * 会执行类的初始化。在执行类的初始化期间，JVM会去获取多个线程对同一个类的初始化。基于这个特性，实现的示例代码如下
 *
 * Created by 峥桂 on 2017/6/6.
 */
public class InstanceFactory05 {
    private InstanceFactory05() {}

    private static class InstanceHolder {
        public static InstanceFactory05 instance = new InstanceFactory05();
    }

    public static InstanceFactory05 getInstance() {
        return InstanceHolder.instance; //这里将导致InstanceHolder类被初始化
    }

}
